package net.servir.capacidades.web.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.Actividad;
import net.servir.capacidades.model.Ambito;
import net.servir.capacidades.model.Etapa;
import net.servir.capacidades.model.FuncionLeyenda;
import net.servir.capacidades.model.Sistema;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.Enumerados.ProfundidadDatosSistema;
import net.servir.capacidades.model.jsp.JspSistemaEdicion;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.SistemaAdmService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class EtapaEdicionController {

	@Autowired 
	private CapacidadesService capacidadesService;
	
	@Autowired 
	private SistemaAdmService sistemaAdmService;
	
	@RequestMapping("/etapaEdicion.htm")
	public @ModelAttribute("sistema")
	JspSistemaEdicion editarSistema(HttpServletRequest request,HttpServletResponse response) throws Exception {
		
		JspSistemaEdicion obj = new JspSistemaEdicion();
		
		//************************************************************
		// se obtiene el dni de la session activa
		//************************************************************
		
		HttpSession session = request.getSession();
		String cod_session =session.getId();

		String dniResponsable = null;
		if(session.getAttribute("dni") != null)			
			dniResponsable = session.getAttribute("dni").toString();
		
		//Obtenemos los datos del Usuario
		Usuario usuario = null;
		if(session.getAttribute("usuario") != null)			
			usuario = (Usuario)session.getAttribute("usuario");
		
		if (usuario == null)
			throw new Exception("No se ha identificado al usuario");
		
		obj.setUsuario(usuario);				
		//************************************************************

		Sistema sistema = new Sistema();
		
		Number idSistema = null;
		Number idAmbito = null;
		String accion = null;
		if (request.getParameter("id_sistema") != null && !request.getParameter("id_sistema").equals(""))
			idSistema = Integer.parseInt(request.getParameter("id_sistema"));
		
		if (idSistema != null)
		{
			sistema = sistemaAdmService.getSistema(idSistema,ProfundidadDatosSistema.CON_ACTIVIDADES);		
		}
		
		String descripcion = request.getParameter("descripcion");
		String acronimo = request.getParameter("acronimo");
		String conAmbitos = "0";
		if (request.getParameter("con_ambitos") != null)
			conAmbitos = request.getParameter("con_ambitos");

		obj.setSistema(sistema);
		

		//String codEstadoParticipante = null;
		// obtener valores del accion de usuario
		accion = request.getParameter("accion");
		String tipoEdicion = request.getParameter("tipo_edicion");
		if (tipoEdicion == null || tipoEdicion.equals(""))
		{
			if (idSistema == null)
				tipoEdicion = "NUEVO";
			else
				tipoEdicion = "MODIFICAR";
		}	
		
		obj.setTipo_edicion(tipoEdicion);
		
		String redirect = "";
		String mensajeUsuario = "";
		// set valores de los controles
		if(accion != null && !accion.equals(""))
		{
			String tipPadre = request.getParameter("tip_padre");
			String dscPadre = request.getParameter("dsc_padre");
			String dscNemotecnicoPadre = request.getParameter("dsc_nemotecnico_padre");
			String dscHijo = request.getParameter("dsc_hijo");
			String dscNemotecnicoHijo = request.getParameter("dsc_nemotecnico_hijo");
			Number idPadre = null;
			Number idHijo = null;
			if (request.getParameter("id_padre")!= null && !request.getParameter("id_padre").equals(""))
				idPadre = Integer.parseInt(request.getParameter("id_padre"));			

			boolean bReload = false;
			if(accion.equals("AGREGAR_HIJO"))
			{
				//Determinamos la tabla Hija
				if (tipPadre.equals("A")) //Ambito, agrega Etapa
				{
					Etapa etapa = new Etapa();
					etapa.setDescripcion(dscHijo);
					etapa.setId_ambito(idPadre);
					
					idHijo = sistemaAdmService.grabarEtapa(etapa);
					bReload = true;
				}				
				else if (tipPadre.equals("E")) //Etapa, agrega Funcion
				{
					FuncionLeyenda funcion = new FuncionLeyenda();
					funcion.setDescripcion(dscHijo);
					funcion.setNemotecnico(dscNemotecnicoHijo);
					funcion.setId_etapa(idPadre);
					
					idHijo = sistemaAdmService.grabarFuncion(funcion);
					bReload = true;
				}				
				else if (tipPadre.equals("F")) //Funcion, agrega Actividad
				{
					Actividad actividad = new Actividad();
					actividad.setDescripcion(dscHijo);
					actividad.setId_funcion(idPadre);
					
					idHijo = sistemaAdmService.grabarActividad(actividad);
					bReload = true;
				}				
				if (bReload)
				{
					sistema = sistemaAdmService.getSistema(idSistema,ProfundidadDatosSistema.CON_ACTIVIDADES);
					obj.setSistema(sistema);
				}
			}	
			else if(accion.equals("MODIFICAR_PADRE"))
			{
				//Actualizamos la tabla padre
				
				if (tipPadre.equals("A")) //Ambito
				{
					Ambito ambito = new Ambito();
					ambito.setDescripcion(dscPadre);
					ambito.setId_ambito(idPadre);
					
					idPadre = sistemaAdmService.grabarAmbito(ambito);
					bReload = true;					
				}				
				else if (tipPadre.equals("E")) //Etapa
				{
					Etapa etapa = new Etapa();
					etapa.setDescripcion(dscPadre);
					etapa.setId_etapa(idPadre);
					
					idHijo = sistemaAdmService.grabarEtapa(etapa);
					bReload = true;
				}				
				else if (tipPadre.equals("F")) //Funcion
				{
					FuncionLeyenda funcion = new FuncionLeyenda();
					funcion.setDescripcion(dscPadre);
					funcion.setId_funcion(idPadre);
					funcion.setNemotecnico(dscNemotecnicoPadre);
					
					idHijo = sistemaAdmService.grabarFuncion(funcion);
					bReload = true;

				}				
				else if (tipPadre.equals("X")) //Actividad
				{

					Actividad actividad = new Actividad();
					actividad.setDescripcion(dscPadre);
					actividad.setId_actividad(idPadre);
					
					idHijo = sistemaAdmService.grabarActividad(actividad);
					bReload = true;
				}				
				if (bReload)
				{
					sistema = sistemaAdmService.getSistema(idSistema,ProfundidadDatosSistema.CON_ACTIVIDADES);
					obj.setSistema(sistema);
				}
			}	
			else if(accion.equals("ELIMINAR_PADRE"))
			{
				//Actualizamos la tabla padre
				
				if (tipPadre.equals("A")) //Ambito
				{
					Ambito ambito = new Ambito();
					ambito.setDescripcion(dscPadre);
					ambito.setId_ambito(idPadre);
					
					idPadre = sistemaAdmService.grabarAmbito(ambito);
					bReload = true;					
				}				
				else if (tipPadre.equals("E")) //Etapa
				{
					mensajeUsuario =  sistemaAdmService.validarEliminarEtapa(idPadre);
					if (mensajeUsuario.equals(""))
					{
						sistemaAdmService.eliminarEtapa(idPadre);
					}
					bReload = true;
				}				
				else if (tipPadre.equals("F")) //Funcion
				{
					mensajeUsuario =  sistemaAdmService.validarEliminarFuncion(idPadre);
					if (mensajeUsuario.equals(""))
					{
						sistemaAdmService.eliminarFuncion(idPadre);
					}
					bReload = true;

				}				
				else if (tipPadre.equals("X")) //Actividad
				{

					mensajeUsuario =  sistemaAdmService.validarEliminarActividad(idPadre);
					if (mensajeUsuario.equals(""))
					{
						sistemaAdmService.eliminarActividad(idPadre);
					}
					bReload = true;
				}				
				if (bReload)
				{
					sistema = sistemaAdmService.getSistema(idSistema,ProfundidadDatosSistema.CON_ACTIVIDADES);
					obj.setSistema(sistema);
				}
			}	
				
			else if(accion.equals("ELIMINAR_AMBITO"))
			{
				if (request.getParameter("id_ambito")!= null && !request.getParameter("id_ambito").equals(""))
				{
					idAmbito = Integer.parseInt(request.getParameter("id_ambito"));
					mensajeUsuario =  sistemaAdmService.validarEliminarAmbito(idAmbito);
					if (mensajeUsuario.equals(""))
					{
						sistemaAdmService.eliminarAmbito(idAmbito);
					}
				}
				sistema = sistemaAdmService.getSistema(idSistema);
				obj.setSistema(sistema);
			}			
				
		}
		if (sistema != null)
		{
			//request.setAttribute("DATALIST", sistema.getAmbitos());
			request.setAttribute("OBJ_SISTEMA", sistema);
			
		}		
		obj.setMensaje_usuario(mensajeUsuario);
		return obj;
	}
	

}
